1 Prepare a single data set

  1. Life expectancy and income for the year 2015.
#Read data.
data0 <- read.csv ("/Users/qianshengliang/Dropbox/STA553/Week 6/LifeExpIncom.csv",
                   header=TRUE,sep=",", colClasses=c("NULL", NA, NA,NA,NA,NA,NA))
#DT::datatable(data0, fillContainer = FALSE, options = list(pageLength = 10))
#2015data
year.id=which(data0$year=="2015")
data2015 = data0[year.id,]
#range(data2015$pop) #11000 - 1400000000
#range(data2015$income) #623 - 120000
#range(data2015$lifeExp,na.rm=TRUE) #49.6 -83.8
#work data
data1 <- data2015
data1$pop2 <- (log(data2015$pop)-9)
#range(data1$pop2) #0.3-12
#write.csv (data2015, "/Users/qianshengliang/Dropbox/STA553/Week 6/data2015.csv")
DT::datatable(data2015, fillContainer = FALSE, options = list(pageLength = 10))

2 Make an interactive scatter plot

To display the association between life expectancy and income for the year 2015.

plot_ly(
  data = data1,
  x = ~income,  # Horizontal axis 
  y = ~lifeExp,   # Vertical axis 
  color = ~factor(country),  
  text = ~paste("<br>Country: ", country,
                "</br>Population: ", pop,
                "</br>Income: ", income,
                "</br>lifeExp: ", lifeExp),
  hoverinfo = "text",
  alpha  = 0.2,
  marker = list(size = ~(pop2), sizeref = 0.1, sizemode = 'area' ),
  type = "scatter",
  mode = "markers",
  ## graphic size
  width = 900,
  height = 700
) %>%
  layout(  
    ### Title 
    title =list(text = "Association between Income and Life Expectancy at 2015", 
                font = list(family = "Times New Roman",  # HTML font family  
                            size = 18,
                            color = "red")), 
    ### legend
    showlegend = FALSE,
    ## margin of the plot
    margin = list(
      b = 100,
      l = 100,
      t = 100,
      r = 50
    ),
    ## Background
    plot_bgcolor ='#f7f7f7', 
    ## Axes labels
    xaxis = list( 
      title=list(text = 'Income',
                 font = list(family = 'Arial')),
      zerolinecolor = 'black', 
      zerolinewidth = 2, 
      gridcolor = 'white'), 
    yaxis = list( 
      title=list(text = 'Life Exoetancy',
                 font = list(family = 'Arial')),
      zerolinecolor = 'purple', 
      zerolinewidth = 2, 
      gridcolor = 'white',
      range=c(40,90)),
    ## annotations
    annotations = list(  
      x = 0.8,   # between 0 and 1. 0 = left, 1 = right
      y = 42,   # between 0 and 1, 0 = bottom, 1 = top
      font = list(size = 12,
                  color = "darkred"),   
      text = "The point size is proportional to the population",   
      xref = "paper",  # "container" spans the entire `width` of the 
      #  lot. "paper" refers to the width of the 
      #  plotting area only. yref = "paper",  
      #  same as xref.
      xanchor = "center", #  horizontal alignment with respect to its x position
      yanchor = "bottom", #  similar to xanchor  
      showarrow = FALSE)
  )

The graph shows the relation between income and life expectancy of 193 countries/regions in 2015. The size of the points is proportioned to population and colors represent different contries.

LS0tCnRpdGxlOiAiSFc2IEludGVyYWN0aXZlIFBsb3RzIHdpdGggcGxvdGx5KCkiCmF1dGhvcjogIlEgTGlhbmciCmRhdGU6ICIzLzUvMjAyNCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGZpZ193aWR0aDogNgogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgZmlnX2hlaWdodDogNAotLS0KCmBgYHs9aHRtbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCmRpdiNUT0MgbGkgewogICAgbGlzdC1zdHlsZTpub25lOwogICAgYmFja2dyb3VuZC1jb2xvcjpsaWdodGdyYXk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CiAgICBjb2xvcjogIzc4MGMwYzsKfQoKLyogbW91c2Ugb3ZlciBsaW5rICovCmRpdiNUT0MgYTpob3ZlciB7CiAgY29sb3I6IHJlZDsKfQoKLyogdW52aXNpdGVkIGxpbmsgKi8KZGl2I1RPQyBhOmxpbmsgewogIGNvbG9yOiBibHVlOwp9CgoKCmgxLnRpdGxlIHsKICBmb250LXNpemU6IDI0cHg7CiAgY29sb3I6IERhcmtibHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKICBmb250LXZhcmlhbnQtY2Fwczogbm9ybWFsOwp9Cmg0LmF1dGhvciB7IAogICAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoNC5kYXRlIHsgCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KaDEgewogICAgZm9udC1zaXplOiAyNHB4OwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMiB7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAKICAgIGZvbnQtc2l6ZTogMTVweDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLyogdW52aXNpdGVkIGxpbmsgKi8KYTpsaW5rIHsKICBjb2xvcjogZ3JlZW47Cn0KCi8qIHZpc2l0ZWQgbGluayAqLwphOnZpc2l0ZWQgewogIGNvbG9yOiBncmVlbjsKfQoKLyogbW91c2Ugb3ZlciBsaW5rICovCmE6aG92ZXIgewogIGNvbG9yOiByZWQ7Cn0KCi8qIHNlbGVjdGVkIGxpbmsgKi8KYTphY3RpdmUgewogIGNvbG9yOiB5ZWxsb3c7Cn0KCjwvc3R5bGU+CmBgYApgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IAojIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlcy4Kb3B0aW9ucyhyZXBvcyA9IGxpc3QoQ1JBTj0iaHR0cDovL2NyYW4ucnN0dWRpby5jb20vIikpCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKICAgbGlicmFyeSh0aWR5dmVyc2UpCn0KaWYgKCFyZXF1aXJlKCJkcGx5ciIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikKICAgbGlicmFyeShkcGx5cikKfQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQogICBsaWJyYXJ5KGtuaXRyKQp9CmlmICghcmVxdWlyZSgiY293cGxvdCIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImNvd3Bsb3QiKQogICBsaWJyYXJ5KGNvd3Bsb3QpCn0KaWYgKCFyZXF1aXJlKCJsYXRleDJleHAiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJsYXRleDJleHAiKQogICBsaWJyYXJ5KGxhdGV4MmV4cCkKfQppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpCiAgIGxpYnJhcnkocGxvdGx5KQp9CmlmICghcmVxdWlyZSgiZ2FwbWluZGVyIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygiZ2FwbWluZGVyIikKICAgbGlicmFyeShnYXBtaW5kZXIpCn0KaWYgKCFyZXF1aXJlKCJwbmciKSkgewogICAgaW5zdGFsbC5wYWNrYWdlcygicG5nIikgICAgICAgICAgICAgIyBJbnN0YWxsIHBuZyBwYWNrYWdlCiAgICBsaWJyYXJ5KCJwbmciKQp9CgogICAgICAgICAgICAgICMgSW5zdGFsbCBSQ3VybCBwYWNrYWdlCiAgICAKCmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsKICAgIGluc3RhbGwucGFja2FnZXMoImNvbG91cnBpY2tlciIpICAgICAgICAgICAgICAKICAgIGxpYnJhcnkoImNvbG91cnBpY2tlciIpCn0KaWYgKCFyZXF1aXJlKCJnaWZza2kiKSkgewogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIAogICAgbGlicmFyeSgiZ2lmc2tpIikKfQppZiAoIXJlcXVpcmUoIm1hZ2ljayIpKSB7CiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYWdpY2siKSAgICAgICAgICAgICAgCiAgICBsaWJyYXJ5KCJtYWdpY2siKQp9CmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsKICAgIGluc3RhbGwucGFja2FnZXMoImdyRGV2aWNlcyIpICAgICAgICAgICAgICAKICAgIGxpYnJhcnkoImdyRGV2aWNlcyIpCn0KIyMjIGdncGxvdCBhbmQgZXh0ZW5zaW9ucwppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgewogICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICAgICAgICAgICAgICAKICAgIGxpYnJhcnkoImdncGxvdDIiKQp9CmlmICghcmVxdWlyZSgiZ2dhbmltYXRlIikpIHsKICAgIGluc3RhbGwucGFja2FnZXMoImdnYW5pbWF0ZSIpICAgICAgICAgICAgICAKICAgIGxpYnJhcnkoImdnYW5pbWF0ZSIpCn0KaWYgKCFyZXF1aXJlKCJnZ3JpZGdlcyIpKSB7CiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3JpZGdlcyIpICAgICAgICAgICAgICAKICAgIGxpYnJhcnkoImdncmlkZ2VzIikKfQppZiAoIXJlcXVpcmUoImdyYXBoaWNzIikpIHsKICAgIGluc3RhbGwucGFja2FnZXMoImdyYXBoaWNzIikgICAgICAgICAgICAgIAogICAgbGlicmFyeSgiZ3JhcGhpY3MiKQp9Cgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIAogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRSwgICAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkKYGBgCgpcCgojIFByZXBhcmUgYSBzaW5nbGUgZGF0YSBzZXQKCjEuICBMaWZlIGV4cGVjdGFuY3kgYW5kIGluY29tZSBmb3IgdGhlIHllYXIgMjAxNS4gCgpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInfQojUmVhZCBkYXRhLgpkYXRhMCA8LSByZWFkLmNzdiAoIi9Vc2Vycy9xaWFuc2hlbmdsaWFuZy9Ecm9wYm94L1NUQTU1My9XZWVrIDYvTGlmZUV4cEluY29tLmNzdiIsCiAgICAgICAgICAgICAgICAgICBoZWFkZXI9VFJVRSxzZXA9IiwiLCBjb2xDbGFzc2VzPWMoIk5VTEwiLCBOQSwgTkEsTkEsTkEsTkEsTkEpKQojRFQ6OmRhdGF0YWJsZShkYXRhMCwgZmlsbENvbnRhaW5lciA9IEZBTFNFLCBvcHRpb25zID0gbGlzdChwYWdlTGVuZ3RoID0gMTApKQojMjAxNWRhdGEKeWVhci5pZD13aGljaChkYXRhMCR5ZWFyPT0iMjAxNSIpCmRhdGEyMDE1ID0gZGF0YTBbeWVhci5pZCxdCiNyYW5nZShkYXRhMjAxNSRwb3ApICMxMTAwMCAtIDE0MDAwMDAwMDAKI3JhbmdlKGRhdGEyMDE1JGluY29tZSkgIzYyMyAtIDEyMDAwMAojcmFuZ2UoZGF0YTIwMTUkbGlmZUV4cCxuYS5ybT1UUlVFKSAjNDkuNiAtODMuOAojd29yayBkYXRhCmRhdGExIDwtIGRhdGEyMDE1CmRhdGExJHBvcDIgPC0gKGxvZyhkYXRhMjAxNSRwb3ApLTkpCiNyYW5nZShkYXRhMSRwb3AyKSAjMC4zLTEyCiN3cml0ZS5jc3YgKGRhdGEyMDE1LCAiL1VzZXJzL3FpYW5zaGVuZ2xpYW5nL0Ryb3Bib3gvU1RBNTUzL1dlZWsgNi9kYXRhMjAxNS5jc3YiKQpEVDo6ZGF0YXRhYmxlKGRhdGEyMDE1LCBmaWxsQ29udGFpbmVyID0gRkFMU0UsIG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCkpCmBgYAoKIyBNYWtlIGFuIGludGVyYWN0aXZlIHNjYXR0ZXIgcGxvdCAKVG8gZGlzcGxheSB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBsaWZlIGV4cGVjdGFuY3kgYW5kIGluY29tZSBmb3IgdGhlIHllYXIgMjAxNS4KCmBgYHtyLCBmaWcuYWxpZ249J2NlbnRlcid9CnBsb3RfbHkoCiAgZGF0YSA9IGRhdGExLAogIHggPSB+aW5jb21lLCAgIyBIb3Jpem9udGFsIGF4aXMgCiAgeSA9IH5saWZlRXhwLCAgICMgVmVydGljYWwgYXhpcyAKICBjb2xvciA9IH5mYWN0b3IoY291bnRyeSksICAKICB0ZXh0ID0gfnBhc3RlKCI8YnI+Q291bnRyeTogIiwgY291bnRyeSwKICAgICAgICAgICAgICAgICI8L2JyPlBvcHVsYXRpb246ICIsIHBvcCwKICAgICAgICAgICAgICAgICI8L2JyPkluY29tZTogIiwgaW5jb21lLAogICAgICAgICAgICAgICAgIjwvYnI+bGlmZUV4cDogIiwgbGlmZUV4cCksCiAgaG92ZXJpbmZvID0gInRleHQiLAogIGFscGhhICA9IDAuMiwKICBtYXJrZXIgPSBsaXN0KHNpemUgPSB+KHBvcDIpLCBzaXplcmVmID0gMC4xLCBzaXplbW9kZSA9ICdhcmVhJyApLAogIHR5cGUgPSAic2NhdHRlciIsCiAgbW9kZSA9ICJtYXJrZXJzIiwKICAjIyBncmFwaGljIHNpemUKICB3aWR0aCA9IDkwMCwKICBoZWlnaHQgPSA3MDAKKSAlPiUKICBsYXlvdXQoICAKICAgICMjIyBUaXRsZSAKICAgIHRpdGxlID1saXN0KHRleHQgPSAiQXNzb2NpYXRpb24gYmV0d2VlbiBJbmNvbWUgYW5kIExpZmUgRXhwZWN0YW5jeSBhdCAyMDE1IiwgCiAgICAgICAgICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAiVGltZXMgTmV3IFJvbWFuIiwgICMgSFRNTCBmb250IGZhbWlseSAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJyZWQiKSksIAogICAgIyMjIGxlZ2VuZAogICAgc2hvd2xlZ2VuZCA9IEZBTFNFLAogICAgIyMgbWFyZ2luIG9mIHRoZSBwbG90CiAgICBtYXJnaW4gPSBsaXN0KAogICAgICBiID0gMTAwLAogICAgICBsID0gMTAwLAogICAgICB0ID0gMTAwLAogICAgICByID0gNTAKICAgICksCiAgICAjIyBCYWNrZ3JvdW5kCiAgICBwbG90X2JnY29sb3IgPScjZjdmN2Y3JywgCiAgICAjIyBBeGVzIGxhYmVscwogICAgeGF4aXMgPSBsaXN0KCAKICAgICAgdGl0bGU9bGlzdCh0ZXh0ID0gJ0luY29tZScsCiAgICAgICAgICAgICAgICAgZm9udCA9IGxpc3QoZmFtaWx5ID0gJ0FyaWFsJykpLAogICAgICB6ZXJvbGluZWNvbG9yID0gJ2JsYWNrJywgCiAgICAgIHplcm9saW5ld2lkdGggPSAyLCAKICAgICAgZ3JpZGNvbG9yID0gJ3doaXRlJyksIAogICAgeWF4aXMgPSBsaXN0KCAKICAgICAgdGl0bGU9bGlzdCh0ZXh0ID0gJ0xpZmUgRXhvZXRhbmN5JywKICAgICAgICAgICAgICAgICBmb250ID0gbGlzdChmYW1pbHkgPSAnQXJpYWwnKSksCiAgICAgIHplcm9saW5lY29sb3IgPSAncHVycGxlJywgCiAgICAgIHplcm9saW5ld2lkdGggPSAyLCAKICAgICAgZ3JpZGNvbG9yID0gJ3doaXRlJywKICAgICAgcmFuZ2U9Yyg0MCw5MCkpLAogICAgIyMgYW5ub3RhdGlvbnMKICAgIGFubm90YXRpb25zID0gbGlzdCggIAogICAgICB4ID0gMC44LCAgICMgYmV0d2VlbiAwIGFuZCAxLiAwID0gbGVmdCwgMSA9IHJpZ2h0CiAgICAgIHkgPSA0MiwgICAjIGJldHdlZW4gMCBhbmQgMSwgMCA9IGJvdHRvbSwgMSA9IHRvcAogICAgICBmb250ID0gbGlzdChzaXplID0gMTIsCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImRhcmtyZWQiKSwgICAKICAgICAgdGV4dCA9ICJUaGUgcG9pbnQgc2l6ZSBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHBvcHVsYXRpb24iLCAgIAogICAgICB4cmVmID0gInBhcGVyIiwgICMgImNvbnRhaW5lciIgc3BhbnMgdGhlIGVudGlyZSBgd2lkdGhgIG9mIHRoZSAKICAgICAgIyAgbG90LiAicGFwZXIiIHJlZmVycyB0byB0aGUgd2lkdGggb2YgdGhlIAogICAgICAjICBwbG90dGluZyBhcmVhIG9ubHkuIHlyZWYgPSAicGFwZXIiLCAgCiAgICAgICMgIHNhbWUgYXMgeHJlZi4KICAgICAgeGFuY2hvciA9ICJjZW50ZXIiLCAjICBob3Jpem9udGFsIGFsaWdubWVudCB3aXRoIHJlc3BlY3QgdG8gaXRzIHggcG9zaXRpb24KICAgICAgeWFuY2hvciA9ICJib3R0b20iLCAjICBzaW1pbGFyIHRvIHhhbmNob3IgIAogICAgICBzaG93YXJyb3cgPSBGQUxTRSkKICApCmBgYAoKVGhlIGdyYXBoIHNob3dzIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGluY29tZSBhbmQgbGlmZSBleHBlY3RhbmN5IG9mIDE5MyBjb3VudHJpZXMvcmVnaW9ucyBpbiAyMDE1LiBUaGUgc2l6ZSBvZiB0aGUgcG9pbnRzIGlzIHByb3BvcnRpb25lZCB0byBwb3B1bGF0aW9uIGFuZCBjb2xvcnMgcmVwcmVzZW50IGRpZmZlcmVudCBjb250cmllcy4g